Amazon S3ã®ãã¡ã€ã«ã¢ããããŒãæŠç¥ã«é¢ããå æ¬çã¬ã€ããã·ã³ã°ã«ããŒãããã«ãããŒãããã€ã¬ã¯ãã¢ããããŒããã»ãã¥ãªãã£ãããã³ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³åãã®æé©åã«ã€ããŠè§£èª¬ããŸãã
S3ã¹ãã¬ãŒãžïŒã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ã®ããã®ãã¡ã€ã«ã¢ããããŒãæŠç¥ããã¹ã¿ãŒãã
Amazon S3 (Simple Storage Service)ã¯ãAWS (Amazon Web Services)ãæäŸãããéåžžã«ã¹ã±ãŒã©ãã«ã§èä¹ æ§ã®é«ããªããžã§ã¯ãã¹ãã¬ãŒãžãµãŒãã¹ã§ããããã¯å€ãã®çŸä»£çãªã¢ããªã±ãŒã·ã§ã³ã®åºç€ã³ã³ããŒãã³ãã§ãããç»åãåç»ããããã¥ã¡ã³ããã¢ããªã±ãŒã·ã§ã³ããŒã¿ãŸã§ããããããã®ã®ä¿¡é Œã§ãããªããžããªãšããŠæ©èœããŸããS3ã广çã«æŽ»çšããäžã§éèŠãªåŽé¢ã¯ãå©çšå¯èœãªããŸããŸãªãã¡ã€ã«ã¢ããããŒãæŠç¥ãçè§£ããããšã§ãããã®ã¬ã€ãã§ã¯ããããã®æŠç¥ã®å æ¬çãªæŠèŠãæäŸããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³åãã®å®è·µçãªå®è£ ãšæé©åæè¡ã«çŠç¹ãåœãŠãŸãã
S3ãã¡ã€ã«ã¢ããããŒãã®åºæ¬ãçè§£ãã
å ·äœçãªæŠç¥ã«å ¥ãåã«ãããã€ãã®ã³ã¢ã³ã³ã»ããã«ã€ããŠèª¬æããŸãïŒ
- ãªããžã§ã¯ããšãã±ããïŒ S3ã¯ããŒã¿ããªããžã§ã¯ããšããŠãã±ããå ã«ä¿åããŸãããã±ããã¯ãªããžã§ã¯ãã®ã³ã³ãããšããŠæ©èœããŸããããã¯ãåã ã®ãã¡ã€ã«ïŒãªããžã§ã¯ãïŒãå«ããã¡ã€ã«ãã©ã«ãïŒãã±ããïŒã®ãããªãã®ã ãšèããŠãã ããã
- ãªããžã§ã¯ãããŒïŒ åãªããžã§ã¯ãã¯ãã±ããå ã§äžæã®ããŒãæã¡ããããèå¥åãšããŠæ©èœããŸããããã¯ãåŸæ¥ã®ãã¡ã€ã«ã·ã¹ãã ã«ããããã¡ã€ã«åãšãã¹ã«äŒŒãŠããŸãã
- AWS SDKãšAPIïŒ æ§ã ãªããã°ã©ãã³ã°èšèªïŒäŸïŒPythonãJavaãJavaScriptïŒã®AWS SDKïŒSoftware Development KitsïŒã䜿çšããããS3 APIãçŽæ¥éããŠS3ãšå¯Ÿè©±ã§ããŸãã
- ãªãŒãžã§ã³ïŒ S3ãã±ããã¯ç¹å®ã®AWSãªãŒãžã§ã³ïŒäŸïŒus-east-1ãeu-west-1ãap-southeast-2ïŒã§äœæãããŸããã¬ã€ãã³ã·ãŒãæå°éã«æããããã«ããŠãŒã¶ãŒã«å°ççã«è¿ããªãŒãžã§ã³ãéžæããŠãã ããã
- ã¹ãã¬ãŒãžã¯ã©ã¹ïŒ S3ã¯ãããŸããŸãªã¢ã¯ã»ã¹ãã¿ãŒã³ãšã³ã¹ãèŠä»¶ã«åãããŠæé©åããããç°ãªãã¹ãã¬ãŒãžã¯ã©ã¹ïŒäŸïŒS3 StandardãS3 Intelligent-TieringãS3 Standard-IAãS3 GlacierïŒãæäŸããŠããŸãã
ã·ã³ã°ã«ããŒãã¢ããããŒã
S3ã«ãã¡ã€ã«ãã¢ããããŒãããæãç°¡åãªæ¹æ³ã¯ãã·ã³ã°ã«ããŒãã¢ããããŒãã䜿çšããããšã§ãããã®æ¹æ³ã¯ãæ¯èŒçå°ããªãã¡ã€ã«ïŒéåžž5GBæªæºïŒã«é©ããŠããŸãã
ã·ã³ã°ã«ããŒãã¢ããããŒãã®ä»çµã¿
ã·ã³ã°ã«ããŒãã¢ããããŒãã§ã¯ããã¡ã€ã«å šäœã1ã€ã®ãªã¯ãšã¹ãã§S3ã«éä¿¡ãããŸããAWS SDKã¯ããã®ã¢ããããŒããå®è¡ããããã®ç°¡åãªã¡ãœãããæäŸããŠããŸãã
äŸïŒPythonãšboto3ïŒ
```python import boto3 s3 = boto3.client('s3') bucket_name = 'your-bucket-name' file_path = 'path/to/your/file.txt' object_key = 'your-object-key.txt' try: s3.upload_file(file_path, bucket_name, object_key) print(f"File '{file_path}' uploaded successfully to s3://{bucket_name}/{object_key}") except Exception as e: print(f"Error uploading file: {e}") ```解説ïŒ
- S3ãšå¯Ÿè©±ããããã«`boto3`ã©ã€ãã©ãªïŒPythonçšAWS SDKïŒã䜿çšããŸãã
- S3ã¯ã©ã€ã¢ã³ããäœæããŸãã
- ãã±ããåãããŒã«ã«ã®ãã¡ã€ã«ãã¹ãS3ã§ã®åžæã®ãªããžã§ã¯ãããŒãæå®ããŸãã
- `upload_file`ã¡ãœããã䜿çšããŠã¢ããããŒããå®è¡ããŸãã
- æœåšçãªäŸå€ããã£ããããããã®ãšã©ãŒãã³ããªã³ã°ãå«ãŸããŠããŸãã
ã·ã³ã°ã«ããŒãã¢ããããŒãã®å©ç¹
- ã·ã³ãã«ãïŒ å®è£ ãšçè§£ã容æã§ãã
- äœãªãŒããŒãããïŒ æå°éã®ã»ããã¢ããã§æžã¿ãŸãã
ã·ã³ã°ã«ããŒãã¢ããããŒãã®æ¬ ç¹
- ãã¡ã€ã«ãµã€ãºã®å¶éïŒ å€§ããªãã¡ã€ã«ïŒéåžž > 5GBïŒã«ã¯é©ããŠããŸããã
- ãããã¯ãŒã¯äžæãžã®è匱æ§ïŒ ã¢ããããŒãäžã«æ¥ç¶ãäžæãããå Žåããã¡ã€ã«å šäœãåã¢ããããŒãããå¿ èŠããããŸãã
ãã«ãããŒãã¢ããããŒã
ãã倧ããªãã¡ã€ã«ã«ã¯ããã«ãããŒãã¢ããããŒããæšå¥šãããã¢ãããŒãã§ãããã®æŠç¥ã§ã¯ããã¡ã€ã«ãããå°ããªããŒãã«åå²ããããããç¬ç«ããŠã¢ããããŒãããŠããS3ã«ãã£ãŠåçµåãããŸãã
ãã«ãããŒãã¢ããããŒãã®ä»çµã¿
- ãã«ãããŒãã¢ããããŒãã®éå§ïŒ ãã«ãããŒãã¢ããããŒããéå§ãããšãS3ã¯äžæã®ã¢ããããŒãIDãè¿ããŸãã
- ããŒãã®ã¢ããããŒãïŒ ãã¡ã€ã«ãããŒãïŒéåžž5MB以äžããã ãæåŸã®ããŒãã¯ããããå°ãããŠãå¯ïŒã«åå²ããåããŒããã¢ããããŒãIDãåç §ããŠåå¥ã«ã¢ããããŒãããŸãã
- ãã«ãããŒãã¢ããããŒãã®å®äºïŒ ãã¹ãŠã®ããŒããã¢ããããŒããããããã¢ããããŒããããããŒãã®ãªã¹ããæäŸããŠããã«ãããŒãã¢ããããŒãã®å®äºãªã¯ãšã¹ããS3ã«éä¿¡ããŸããS3ã¯ãã®åŸãããŒããåäžã®ãªããžã§ã¯ãã«çµã¿ç«ãŠãŸãã
- ãã«ãããŒãã¢ããããŒãã®äžæ¢ïŒ ã¢ããããŒãã倱æãŸãã¯ãã£ã³ã»ã«ãããå Žåããã«ãããŒãã¢ããããŒããäžæ¢ã§ããéšåçã«ã¢ããããŒããããããŒããåé€ãããŸãã
äŸïŒPythonãšboto3ïŒ
```python import boto3 import os s3 = boto3.client('s3') bucket_name = 'your-bucket-name' file_path = 'path/to/your/large_file.iso' object_key = 'your-large_file.iso' part_size = 1024 * 1024 * 5 # 5MB part size try: # Initiate multipart upload response = s3.create_multipart_upload(Bucket=bucket_name, Key=object_key) upload_id = response['UploadId'] # Get file size file_size = os.stat(file_path).st_size # Upload parts parts = [] with open(file_path, 'rb') as f: part_num = 1 while True: data = f.read(part_size) if not data: break upload_part_response = s3.upload_part(Bucket=bucket_name, Key=object_key, UploadId=upload_id, PartNumber=part_num, Body=data) parts.append({'PartNumber': part_num, 'ETag': upload_part_response['ETag']}) part_num += 1 # Complete multipart upload complete_response = s3.complete_multipart_upload( Bucket=bucket_name, Key=object_key, UploadId=upload_id, MultipartUpload={'Parts': parts} ) print(f"Multipart upload of '{file_path}' to s3://{bucket_name}/{object_key} completed successfully.") except Exception as e: print(f"Error during multipart upload: {e}") # Abort multipart upload if an error occurred if 'upload_id' in locals(): s3.abort_multipart_upload(Bucket=bucket_name, Key=object_key, UploadId=upload_id) print("Multipart upload aborted.") ```解説ïŒ
- `create_multipart_upload`ã䜿çšããŠãã«ãããŒãã¢ããããŒããéå§ããã¢ããããŒãIDãååŸããŸãã
- `os.stat`ã䜿çšããŠãã¡ã€ã«ãµã€ãºã決å®ããŸãã
- ãã¡ã€ã«ã5MBã®ãã£ã³ã¯ïŒããŒãïŒã§èªã¿åããŸãã
- åããŒãã«å¯ŸããŠãã¢ããããŒãIDãããŒãçªå·ãããŒãããŒã¿ãæå®ããŠ`upload_part`ãåŒã³åºããŸããã¬ã¹ãã³ã¹ããã®`ETag`ã¯ãã¢ããããŒããå®äºããããã«äžå¯æ¬ ã§ãã
- ã¢ããããŒããããåããŒãã®`PartNumber`ãš`ETag`ã`parts`ãªã¹ãã§è¿œè·¡ããŸãã
- æåŸã«ãã¢ããããŒãIDãšããŒãã®ãªã¹ããæå®ããŠ`complete_multipart_upload`ãåŒã³åºããŸãã
- ãšã©ãŒãã³ããªã³ã°ã«ã¯ããšã©ãŒãçºçããå Žåã«ãã«ãããŒãã¢ããããŒããäžæ¢ããåŠçãå«ãŸããŠããŸãã
ãã«ãããŒãã¢ããããŒãã®å©ç¹
- 倧ããªãã¡ã€ã«ã®ãµããŒãïŒ 5GBãè¶ ãããã¡ã€ã«ïŒæå€§5TBïŒãæ±ããŸãã
- èé害æ§ã®åäžïŒ ããŒãã®ã¢ããããŒãã倱æããå Žåããã¡ã€ã«å šäœã§ã¯ãªãããã®ããŒãã ããåã¢ããããŒãããã°æžã¿ãŸãã
- 䞊åã¢ããããŒãïŒ ããŒãã䞊åã§ã¢ããããŒãã§ãããããå šäœã®ã¢ããããŒãããã»ã¹ãé«éåã§ããå¯èœæ§ããããŸãã
- æçµçãªãµã€ãºãç¥ãåã«ã¢ããããŒããéå§å¯èœïŒ ã©ã€ãã¹ããªãŒã ã«åœ¹ç«ã¡ãŸãã
ãã«ãããŒãã¢ããããŒãã®æ¬ ç¹
- è€éæ§ã®å¢å ïŒ ã·ã³ã°ã«ããŒãã¢ããããŒããããå®è£ ãè€éã§ãã
- é«ããªãŒããŒãããïŒ ããå€ãã®APIåŒã³åºããšããŒãã®ç®¡çãå¿ èŠã§ãã
ã¯ã©ã€ã¢ã³ãïŒãã©ãŠã¶/ã¢ãã€ã«ã¢ããªïŒããã®ãã€ã¬ã¯ãã¢ããããŒã
å€ãã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããŠãŒã¶ãŒã¯ãŠã§ããã©ãŠã¶ãã¢ãã€ã«ã¢ããªããçŽæ¥ãã¡ã€ã«ãã¢ããããŒãããå¿ èŠããããŸããã»ãã¥ãªãã£äžã®çç±ãããéåžžã¯AWSèªèšŒæ å ±ãã¯ã©ã€ã¢ã³ãã«çŽæ¥å ¬éããããããŸããã代ããã«ãäºå眲åä»ãURLãŸãã¯äžæçãªAWSèªèšŒæ å ±ã䜿çšããŠãã¯ã©ã€ã¢ã³ãã«S3ãžã®ãã¡ã€ã«ã¢ããããŒãã®äžæçãªã¢ã¯ã»ã¹æš©ãä»äžã§ããŸãã
äºå眲åä»ãURL
äºå眲åä»ãURLã¯ãç¹å®ã®S3æäœïŒäŸïŒãã¡ã€ã«ã®ã¢ããããŒãïŒãå®è¡ããããã®äžæçãªã¢ã¯ã»ã¹ãèš±å¯ããURLã§ãããã®URLã¯AWSèªèšŒæ å ±ã䜿çšããŠçœ²åãããæå¹æéãå«ãŸããŠããŸãã
äºå眲åä»ãURLã®ä»çµã¿
- äºå眲åä»ãURLã®çæïŒ ãµãŒããŒãµã€ãã¢ããªã±ãŒã·ã§ã³ããç¹å®ã®S3ãã±ãããšããŒã«ãã¡ã€ã«ãã¢ããããŒãããããã®äºå眲åä»ãURLãçæããŸãã
- ã¯ã©ã€ã¢ã³ããžã®URLéä¿¡ïŒ äºå眲åä»ãURLãã¯ã©ã€ã¢ã³ãïŒãã©ãŠã¶ãŸãã¯ã¢ãã€ã«ã¢ããªïŒã«éä¿¡ãããŸãã
- ã¯ã©ã€ã¢ã³ãã«ãããã¡ã€ã«ã¢ããããŒãïŒ ã¯ã©ã€ã¢ã³ãã¯äºå眲åä»ãURLã䜿çšããŠãHTTP PUTãªã¯ãšã¹ãã§ãã¡ã€ã«ãS3ã«çŽæ¥ã¢ããããŒãããŸãã
äŸïŒPythonãšboto3 - äºå眲åä»ãURLã®çæïŒ
```python import boto3 s3 = boto3.client('s3') bucket_name = 'your-bucket-name' object_key = 'your-object-key.jpg' expiration_time = 3600 # URL expires in 1 hour (seconds) try: # Generate presigned URL for PUT operation presigned_url = s3.generate_presigned_url( 'put_object', Params={'Bucket': bucket_name, 'Key': object_key}, ExpiresIn=expiration_time ) print(f"Presigned URL for uploading to s3://{bucket_name}/{object_key}: {presigned_url}") except Exception as e: print(f"Error generating presigned URL: {e}") ```äŸïŒJavaScript - äºå眲åä»ãURLã䜿çšããã¢ããããŒãïŒ
```javascript async function uploadFile(presignedUrl, file) { try { const response = await fetch(presignedUrl, { method: 'PUT', body: file, headers: { 'Content-Type': file.type, //æ£ããã³ã³ãã³ãã¿ã€ããèšå®ããããšãéèŠã§ããããããªããšS3ããã¡ã€ã«ãèªèããªãå¯èœæ§ããããŸãã }, }); if (response.ok) { console.log('File uploaded successfully!'); } else { console.error('File upload failed:', response.status); } } catch (error) { console.error('Error uploading file:', error); } } // Example usage: const presignedURL = 'YOUR_PRESIGNED_URL'; // Replace with your actual presigned URL const fileInput = document.getElementById('fileInput'); // Assuming you have an input type="file" element fileInput.addEventListener('change', (event) => { const file = event.target.files[0]; if (file) { uploadFile(presignedURL, file); } }); ```äºå眲åä»ãURLã«é¢ããéèŠãªèæ ®äºé ïŒ
- ã»ãã¥ãªãã£ïŒ äºå眲åä»ãURLã®ã¹ã³ãŒãããå¿ èŠãªç¹å®ã®ãªããžã§ã¯ããšæäœã«éå®ããŸããé©åãªæå¹æéãèšå®ããŠãã ããã
- ã³ã³ãã³ãã¿ã€ãïŒ äºå眲åä»ãURLãçæããéããŸãã¯ãã¡ã€ã«ãã¢ããããŒãããéã«ãæ£ãã`Content-Type`ããããŒãèšå®ããŠãã ãããããã¯ãS3ããã¡ã€ã«ãæ£ããèå¥ããŠæäŸããããã«äžå¯æ¬ ã§ããããã¯ã`generate_presigned_url`ã«æž¡ã`Params`ãã£ã¯ã·ã§ããªã§`ContentType`ãæå®ããããšã§å®çŸã§ããŸããJavaScriptã®äŸã§ãã³ã³ãã³ãã¿ã€ãã®èšå®ã瀺ããŠããŸãã
- ãšã©ãŒãã³ããªã³ã°ïŒ ãµãŒããŒãµã€ãïŒURLçææïŒãšã¯ã©ã€ã¢ã³ããµã€ãïŒãã¡ã€ã«ã¢ããããŒãæïŒã®äž¡æ¹ã§ãé©åãªãšã©ãŒãã³ããªã³ã°ãå®è£ ããŠãã ããã
äžæçãªAWSèªèšŒæ å ±ïŒAWS STSïŒ
ãããã¯ãAWS STSïŒSecurity Token ServiceïŒã䜿çšããŠãã¯ã©ã€ã¢ã³ããS3ã«çŽæ¥ã¢ã¯ã»ã¹ããããã«äœ¿çšã§ããäžæçãªAWSèªèšŒæ å ±ïŒã¢ã¯ã»ã¹ããŒãã·ãŒã¯ã¬ããããŒãã»ãã·ã§ã³ããŒã¯ã³ïŒãçæããããšãã§ããŸãããã®ã¢ãããŒãã¯äºå眲åä»ãURLãããè€éã§ãããã¢ã¯ã»ã¹ããªã·ãŒã«å¯ŸããŠãã倧ããªæè»æ§ãšå¶åŸ¡ãæäŸããŸãã
äžæçãªèªèšŒæ å ±ã®ä»çµã¿
- ãµãŒããŒã«ããäžæèªèšŒæ å ±ã®ãªã¯ãšã¹ãïŒ ãµãŒããŒãµã€ãã¢ããªã±ãŒã·ã§ã³ãAWS STSã䜿çšããŠãç¹å®ã®æš©éãæã€äžæçãªèªèšŒæ å ±ããªã¯ãšã¹ãããŸãã
- STSã«ããèªèšŒæ å ±ã®è¿åŽïŒ AWS STSã¯äžæçãªèªèšŒæ å ±ïŒã¢ã¯ã»ã¹ããŒãã·ãŒã¯ã¬ããããŒãã»ãã·ã§ã³ããŒã¯ã³ïŒãè¿ããŸãã
- ãµãŒããŒããã¯ã©ã€ã¢ã³ããžã®èªèšŒæ å ±éä¿¡ïŒ ãµãŒããŒã¯äžæçãªèªèšŒæ å ±ãã¯ã©ã€ã¢ã³ãã«ïŒå®å šã«ãäŸïŒHTTPSçµç±ã§ïŒéä¿¡ããŸãã
- ã¯ã©ã€ã¢ã³ãã«ããAWS SDKã®èšå®ïŒ ã¯ã©ã€ã¢ã³ãã¯äžæçãªèªèšŒæ å ±ã§AWS SDKãèšå®ããŸãã
- ã¯ã©ã€ã¢ã³ãã«ãããã¡ã€ã«ã¢ããããŒãïŒ ã¯ã©ã€ã¢ã³ãã¯AWS SDKã䜿çšããŠãã¡ã€ã«ãS3ã«çŽæ¥ã¢ããããŒãããŸãã
ãã€ã¬ã¯ãã¢ããããŒãã®å©ç¹
- ãµãŒããŒè² è·ã®è»œæžïŒ ã¢ããããŒãããã»ã¹ããµãŒããŒããã¯ã©ã€ã¢ã³ãã«ãªãããŒãããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžïŒ ç¹ã«å€§ããªãã¡ã€ã«ã®å ŽåããŠãŒã¶ãŒã«ãšã£ãŠã¢ããããŒãé床ãéããªããŸãã
- ã¹ã±ãŒã©ããªãã£ïŒ ãµãŒããŒã®ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããããšãªãã倿°ã®åæã¢ããããŒããåŠçããŸãã
ãã€ã¬ã¯ãã¢ããããŒãã®æ¬ ç¹
- ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé ïŒ äžæ£ã¢ã¯ã»ã¹ãé²ãããã«ãæš©éãšæå¹æéã®æ éãªç®¡çãå¿ èŠã§ãã
- è€éæ§ïŒ ãµãŒããŒãµã€ãã®ã¢ããããŒããããå®è£ ãè€éã§ãã
S3ãã¡ã€ã«ã¢ããããŒãã®ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé
S3ã®ãã¡ã€ã«ã¢ããããŒããæ±ãéãã»ãã¥ãªãã£ã¯æéèŠã§ãã以äžã«ãäž»èŠãªã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ãããã€ã瀺ããŸãïŒ
- æå°æš©éã®ååïŒ ãã¡ã€ã«ãã¢ããããŒãããããã«å¿ èŠãªæå°éã®æš©éã®ã¿ãä»äžããŸããæªçšãããå¯èœæ§ã®ããåºç¯ãªæš©éã®ä»äžã¯é¿ããŠãã ããã
- ãã±ããããªã·ãŒïŒ ãã±ããããªã·ãŒã䜿çšããŠS3ãã±ãããžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããŸããIPã¢ãã¬ã¹ããŠãŒã¶ãŒãšãŒãžã§ã³ãããŸãã¯ãã®ä»ã®åºæºã«åºã¥ããŠã¢ã¯ã»ã¹ãå¶éããŠãã ããã
- IAMããŒã«ïŒ IAMããŒã«ã䜿çšããŠãEC2ã€ã³ã¹ã¿ã³ã¹ãä»ã®AWSãµãŒãã¹ã§å®è¡ãããŠããã¢ããªã±ãŒã·ã§ã³ã«æš©éãä»äžããŸãã
- æå·åïŒ ä¿ç®¡æã®æå·åïŒS3管çããŒãKMSããŒããŸãã¯é¡§å®¢æäŸã®ããŒã䜿çšïŒãæå¹ã«ããŠããŒã¿ãä¿è·ããŸãã
- HTTPSïŒ ã¯ã©ã€ã¢ã³ããšS3ã®éã§è»¢éäžã®ããŒã¿ãæå·åããããã«ãåžžã«HTTPSã䜿çšããŠãã ããã
- å ¥åæ€èšŒïŒ æªæã®ããã¢ããããŒããé²ãããã«ããã¡ã€ã«åãšã³ã³ãã³ãã¿ã€ããæ€èšŒããŸããã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒã®è匱æ§ãé²ãããã®ãµãã¿ã€ãºãå®è£ ããŠãã ããã
- ãŠã€ã«ã¹ã¹ãã£ã³ïŒ ãŠã€ã«ã¹ã¹ãã£ã³ãµãŒãã¹ãšã®çµ±åãæ€èšããã¢ããããŒãããããã¡ã€ã«ããã«ãŠã§ã¢ã«ã€ããŠã¹ãã£ã³ããŠãã ããã
- 宿çãªã»ãã¥ãªãã£ç£æ»ïŒ 宿çãªã»ãã¥ãªãã£ç£æ»ã宿œããŠãæœåšçãªè匱æ§ãç¹å®ãã察åŠããŠãã ããã
S3ãã¡ã€ã«ã¢ããããŒãã®ããã©ãŒãã³ã¹æé©å
S3ãã¡ã€ã«ã¢ããããŒãã®ããã©ãŒãã³ã¹ãæé©åããããšã¯ãè¯å¥œãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããã³ã¹ããæå°éã«æããããã«äžå¯æ¬ ã§ãã以äžã«ããã€ãã®ãã³ãã瀺ããŸãïŒ
- é©åãªãªãŒãžã§ã³ã®éžæïŒ ãŠãŒã¶ãŒã«å°ççã«è¿ãAWSãªãŒãžã§ã³ãéžæããŠãã¬ã€ãã³ã·ãŒãæå°éã«æããŸãã
- 倧ããªãã¡ã€ã«ã«ã¯ãã«ãããŒãã¢ããããŒãã䜿çšïŒ åè¿°ã®éãããã«ãããŒãã¢ããããŒãã¯å€§ããªãã¡ã€ã«ã®ã¢ããããŒãé床ãå€§å¹ ã«åäžãããããšãã§ããŸãã
- 䞊åã¢ããããŒãïŒ ã¹ã«ãŒããããæå€§åããããã«ããã«ãããŒãã¢ããããŒãã®è€æ°ã®ããŒãã䞊åã§ã¢ããããŒãããŸãã
- TCPãŠã£ã³ããŠãµã€ãºã®å¢å ïŒ TCPãŠã£ã³ããŠãµã€ãºãå¢ãããšãç¹ã«é·è·é¢æ¥ç¶ã§ã®ãããã¯ãŒã¯ããã©ãŒãã³ã¹ãåäžããå¯èœæ§ããããŸããTCPãŠã£ã³ããŠãµã€ãºã®èª¿æŽæ¹æ³ã«ã€ããŠã¯ãã䜿ãã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ããã¥ã¢ã«ãåç §ããŠãã ããã
- ãªããžã§ã¯ãããŒåœåã®æé©åïŒ S3ã®ãããã¹ãããã«ã€ãªããå¯èœæ§ã®ããé£ç¶ãããªããžã§ã¯ãããŒåãé¿ããŸããã©ã³ãã ãªãã¬ãã£ãã¯ã¹ãŸãã¯ããã·ã¥ããŒã¹ã®åœåã¹ããŒã ã䜿çšããŠããªããžã§ã¯ããS3ããŒãã£ã·ã§ã³å šäœã«åçã«åæ£ãããŸãã
- CDNïŒã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒã®äœ¿çšïŒ ã¢ããããŒãããããã¡ã€ã«ãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«æäŸããŠããå Žåã¯ãAmazon CloudFrontã®ãããªCDNã䜿çšããŠã³ã³ãã³ãããŠãŒã¶ãŒã®è¿ãã«ãã£ãã·ã¥ããã¬ã€ãã³ã·ãŒãåæžããŸãã
- S3ããã©ãŒãã³ã¹ã®ã¢ãã¿ãªã³ã°ïŒ Amazon CloudWatchã䜿çšããŠS3ã®ããã©ãŒãã³ã¹ã¡ããªã¯ã¹ãç£èŠããæœåšçãªããã«ããã¯ãç¹å®ããŸãã
é©åãªã¢ããããŒãæŠç¥ã®éžæ
ã¢ããªã±ãŒã·ã§ã³ã«æé©ãªãã¡ã€ã«ã¢ããããŒãæŠç¥ã¯ã以äžãå«ãããã€ãã®èŠå ã«ãã£ãŠç°ãªããŸãïŒ
- ãã¡ã€ã«ãµã€ãºïŒ å°ããªãã¡ã€ã«ã«ã¯ã·ã³ã°ã«ããŒãã¢ããããŒãã§ååãããããŸããã倧ããªãã¡ã€ã«ã«ã¯ãã«ãããŒãã¢ããããŒããæšå¥šãããŸãã
- ã»ãã¥ãªãã£èŠä»¶ïŒ ã»ãã¥ãªãã£ãæåªå äºé ã§ããå Žåã¯ãäºå眲åä»ãURLãŸãã¯äžæçãªAWSèªèšŒæ å ±ã䜿çšããŠãã¯ã©ã€ã¢ã³ãã«äžæçãªã¢ã¯ã»ã¹æš©ãä»äžããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒ ãã€ã¬ã¯ãã¢ããããŒãã¯ãã¢ããããŒãããã»ã¹ãã¯ã©ã€ã¢ã³ãã«ãªãããŒãããããšã§ãããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ïŒ ã¢ããããŒãæŠç¥ãéžæããéã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ã®è€éããèæ ®ããŠãã ããã
- ã³ã¹ãïŒ ããŸããŸãªã¢ããããŒãæŠç¥ã®ã³ã¹ããžã®åœ±é¿ãè©äŸ¡ããŠãã ããã
äŸïŒã°ããŒãã«ã¡ãã£ã¢å ±æãã©ãããã©ãŒã
äžçäžã®ãŠãŒã¶ãŒãåçãåç»ãã¢ããããŒãããã°ããŒãã«ã¡ãã£ã¢å ±æãã©ãããã©ãŒã ãæ§ç¯ããŠãããšæ³åããŠãã ããããã¡ã€ã«ã¢ããããŒãã«ã¯æ¬¡ã®ããã«ã¢ãããŒããããããããŸããïŒ
- äºå眲åä»ãURLã«ãããã€ã¬ã¯ãã¢ããããŒãïŒ ã¯ã©ã€ã¢ã³ãïŒãŠã§ãããã³ã¢ãã€ã«ã¢ããªïŒããã®ãã€ã¬ã¯ãã¢ããããŒããäºå眲åä»ãURLã䜿çšããŠå®è£ ããŸããããã«ããããµãŒããŒã®è² è·ã軜æžããããŠãŒã¶ãŒã«ãšã£ãŠããé«éãªã¢ããããŒããšã¯ã¹ããªãšã³ã¹ãæäŸãããŸãã
- 倧ããªåç»ã®ããã®ãã«ãããŒãã¢ããããŒãïŒ åç»ã®ã¢ããããŒãã«ã¯ããã«ãããŒãã¢ããããŒãã䜿çšããŠã倧ããªãã¡ã€ã«ãå¹ççãã€å埩åãæã£ãŠåŠçããŸãã
- ãªãŒãžã§ãã«ãã±ããïŒ äžçã®ããŸããŸãªå°åã®ãŠãŒã¶ãŒã®ã¬ã€ãã³ã·ãŒãæå°éã«æããããã«ãè€æ°ã®AWSãªãŒãžã§ã³ã«ããŒã¿ãä¿åããŸãããŠãŒã¶ãŒã®IPã¢ãã¬ã¹ã«åºã¥ããŠãæãè¿ããªãŒãžã§ã³ã«ã¢ããããŒããã«ãŒãã£ã³ã°ããããšãã§ããŸãã
- ã³ã³ãã³ãé ä¿¡ã®ããã®CDNïŒ Amazon CloudFrontã䜿çšããŠãã¡ãã£ã¢ã³ã³ãã³ãããã£ãã·ã¥ããäžçäžã®ãŠãŒã¶ãŒã«é ä¿¡ããŸãã
- ãŠã€ã«ã¹ã¹ãã£ã³ïŒ ãŠã€ã«ã¹ã¹ãã£ã³ãµãŒãã¹ãšçµ±åããŠãã¢ããããŒããããã¡ãã£ã¢ãã¡ã€ã«ããã«ãŠã§ã¢ã«ã€ããŠã¹ãã£ã³ããŸãã
- ã³ã³ãã³ãã¢ãã¬ãŒã·ã§ã³ïŒ ã¢ããããŒããããã³ã³ãã³ãããã©ãããã©ãŒã ã®åºæºãæºãããŠããããšã確èªããããã«ãã³ã³ãã³ãã¢ãã¬ãŒã·ã§ã³ããªã·ãŒãšããŒã«ãå®è£ ããŸãã
çµè«
S3ãã¡ã€ã«ã¢ããããŒãæŠç¥ããã¹ã¿ãŒããããšã¯ãã¹ã±ãŒã©ãã«ã§å®å šããã€ããã©ãŒãã³ã¹ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ããå©çšå¯èœãªããŸããŸãªãªãã·ã§ã³ãçè§£ãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ããã¡ã€ã«ã¢ããããŒãã®ã¯ãŒã¯ãããŒãæé©åããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«åªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸããã·ã³ã°ã«ããŒãã¢ããããŒãããããé«åºŠãªãã«ãããŒãã¢ããããŒããŸã§ããããŠäºå眲åä»ãURLã§ã¯ã©ã€ã¢ã³ãã®ã¢ããããŒããä¿è·ããããšããCDNã§ããã©ãŒãã³ã¹ãåäžãããããšãŸã§ãå šäœçãªçè§£ã¯S3ã®èœåãæå€§éã«æŽ»çšããããšãä¿èšŒããŸãã